// 路由鉴权  鉴权:项目当中路由能不能被访问的权限设置(某一个路由什么条件下可以访问、什么条件下不可以访问)
import router from '@/router/index.ts'
import nprogress from 'nprogress'
// 引入进度条的样式
import 'nprogress/nprogress.css'
nprogress.configure({showSpinner:false})
import setting from './setting'

// 获取用户相关的小仓库内部token数据，去判断用户是否登陆成功
import useUserStore from './store/modules/user'
import pinia from './store'
let userStore = useUserStore(pinia)
// console.log(userStore)

// 全局守卫：项目当中任意路由切换都会触发的钩子

// 全局的前置守卫
router.beforeEach(async(to:any,from:any,next:any)=>{
  document.title=`${setting.title}-${to.meta.title}`
  // to:将要访问哪一个路由
  // from:从哪个路由而来
  // next：路由的放行函数
  nprogress.start()
  // 获取token，去判断用户登录、还是未登录
  let token = userStore.token
  // 获取用户名字
  let username = userStore.username

  // 用户登录判断
  if(token){
    // 登陆成功，访问login，不能访问，指向首页
    if(to.path=='/login'){
      next({path:'/'})
    }else{
      // 登录成功访问其余的六个路由(登录排除)
      // 有用户信息
      if(username){
        // 放行
        next()
      }else{
        // 如果没有用户信息，在守卫这里发请求获取到了用户信息再放行
        try{
          // 获取用户信息进行放行
          await userStore.userInfo()
          next()
        }catch(error){
          //token过期：获取不到用户信息 
          //用户手动修改本地存储token
          // 退出登录->相关数据清空
          userStore.userLogout()
          next({path:'/login',query:{redirect:to.path}})
        }
      }
      
    }
  }else{
    // 用户未登录
    if(to.path=='/login'){
      next()
    }else{
      next({path:'/login',query:{redirect:to.path}})
    }
  }
  
})
// 全局的后置守卫
router.afterEach((to:any,from:any)=>{
  nprogress.done()
})

//第一个问题：任意路由切换实现进度条业务 ---nprogress
//第二个问题：路由鉴权(路由组件访问权限的设置)
// 全部路由组件：登录|404|任意路由|首页|数据大屏|权限管理(3个子路由)|商品管理(4个子路由)

// 用户未登录：可以访问login,其余的6个路由不能访问(指向login)
// 用户登录成功：不可以访问login[指向首页]，其余的路由可以访问